package com.grm.mapper;

import com.grm.model.Product;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.annotations.Query;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

import java.util.List;

public interface ProductRepository extends ElasticsearchRepository<Product, String> {
    // 模糊匹配 ?0表示占位符，会自动替换成查询词name的值
    // es会分词后与查询词进行匹配，and表示所有分词都必须匹配
    // match 查询适用于文本字段（类型为 text）的模糊匹配，因为它会自动分词并进行匹配。适合一般的模糊搜索。
    @Query("{\"match\": {\"name\": {\"query\": \"?0\", \"operator\": \"and\"}}}")
    // wildcard基于通配符的查询,适用于非分词字段（例如 keyword 类型的字段）,性能差
    // 【此处不适合，因为类型不是keyword】@Query("{\"wildcard\": {\"name\": \"*?0*\"}}")
    List<Product> findByNameContaining(String name);

    @Query("{\"match\": {\"name\": {\"query\": \"?0\", \"operator\": \"and\"}}}")
    List<Product> findByNameContaining(String name, Pageable pageable);
}